//package m202406.d23;
//
///**
// * @@author: 爱做梦的锤子
// * @date: 2024/6/23 23:11
// */
//public class Q450 {
//    public TreeNode deleteNode(TreeNode root, int key) {
//        TreeNode target = find(root, key);
//        del(target);
//        return root;
//    }
//
//    private void del(TreeNode node) {
//        TreeNode right = findRight(node.right);
//        if (right != null) {
//            node.val = right.val;
//            return;
//        }
//        TreeNode left = findLeft(node.left);
//        if (left != null) {
//            node.val = left.val;
//            return;
//        }
//    }
//
//    private TreeNode find(TreeNode node, int key) {
//        if (node == null) {
//            return null;
//        }
//        if (node.val < key) {
//            if (canDel(node.right, key)) {
//                node.right = null;
//                return null;
//            }
//            return find(node.right, key);
//        } else if (node.val > key) {
//            if (canDel(node.left, key)) {
//                node.left = null;
//                return null;
//            }
//            return find(node.left, key);
//        } else {
//            return node;
//        }
//    }
//
//    private boolean canDel(TreeNode node, int key) {
//        return node != null && node.val == key && node.left == null && node.right == null;
//    }
//
//    private TreeNode findRight(TreeNode node) {
//        if (node == null) {
//            return null;
//        }
//        if (node.left == null && node.right != null) {
//            int val = node.val;
//            del(node);
//            return new TreeNode(val);
//        }
//        if (node.left != null) {
//            if (node.left.left == null && node.left.right == null) {
//                return node.left;
//            }
//            return findRight(node.left);
//        }
////        return findRight(node.left);
//    }
//
//    private TreeNode findLeft(TreeNode node) {
//
//    }
//
//
//    public static class TreeNode {
//        int val;
//        TreeNode left;
//        TreeNode right;
//
//        TreeNode() {
//        }
//
//        TreeNode(int val) {
//            this.val = val;
//        }
//
//        TreeNode(int val, TreeNode left, TreeNode right) {
//            this.val = val;
//            this.left = left;
//            this.right = right;
//        }
//    }
//}
